Appearance
其实问题
本节目标:理解“其实问题”的核心思路,并能把它用于实际开发或面试表达。 我又把交易相关代码过了一遍,结合外汇/CFD 经纪商面试里常问、且你项目里真有实现的点,整理在下面。前面我们已经写过行情 Worker、WS、K 线、SLTP、NumericInput、万级持仓等,这里刻意避开重复讲同一套,只补「还喜欢问、且项目里能对上代码」的维度。
一、面试高频 × 你项目里可对上的技术点
1. Bid/Ask 与订单方向(最容易被问错的「教科书题」)
- 为什么买用 ask、卖用 bid?持仓的 CURRENT_PRICE 用哪边价?挂单又用哪边?
- 代码:
src/views/(public)/trading/_utils/orderPrice.ts里applyQuoteToOrder、calculateOrderCurrentPrice(持仓)与calculatePendingOrderCurrentPrice(挂单)区分开——这是面试官用来筛「有没有真做过终端」的经典题。 - 简历一句:统一封装「持仓 / 挂单」两套 bid-ask 取值规则,避免盈亏与可成交量和后台口径不一致。
2. 限价单是 Limit 还是 Stop(由现价与委托价相对位置决定)
- 代码:
src/views/(public)/trading/_utils/position.ts的getLimitOrderCmd,useOrderBuilder里组SocketCmd前会走这套分支;限价等于现价时直接拦掉并提示(useOrderBuilder)。 - 简历一句:在前端显式推导 Buy/Sell Limit vs Stop,并与当前价校验,减少无效单与后端拒单。
3. 市场开闭市、节假日、多时区(能不能下单不止看「有没有报价」)
- 代码:
MarketStatusWrapper.vue消费marketCalendarStore.allSymbolMarketStatus,requestSnapshot+ Worker 日历(你之前的亮点 4);另有useMarketStatus.ts按sessions_trade+server_offset_seconds本地算下一档触发时间。 - 简历一句:交易面板与日历 Worker 联动,仅在市场明确
isOpen时渲染下单区,闭市展示下次开盘时间(UTC)。
4. 保证金、最大可开手数、手数步长(Pre-trade / 规格驱动)
- 代码:
TradePanel.vue手数绑定min_volume / max_volume / step_volume;AccountInfo.vue里用margin_in_user_currency和margin_free用 Decimal 算maxTradable,并按min_volume向下取整到步长。 - 简历一句:手数输入与「按账户币种折算后的每手保证金」联动,约束最大可开手数,避免用户填出后端必拒的单。
5. 点差、Digits、报价有效性(展示与风控习惯)
- 代码:
calculateSpread(pips 整数化)、品种DIGITS驱动价格展示;SLTP / NumericInput 等多处与 digits、step 对齐(你已有多条亮点)。 - 简历一句:点差与价格精度与品种规格绑定,保证列表与面板和 MT 口径一致。
6. 批量平仓 / 批量改 SLTP:部分失败怎么展示
- 代码:
OrderTabs.vue里Promise.allSettled+processBatchResults(src/utils/batchOperationHelper.ts),失败时用 VNode 多行展示每张 ticket 的错误。 - 简历一句:批量指令前端聚合结果,支持部分失败时的结构化错误展示,而不是一句笼统失败。
7. 部分平仓与折叠/对冲行(业务规则 + 并发防重)
- 代码:
handlePartialClose对折叠行按子单Math.min(请求手数, 子单手数)拆lots数组;closeOpenOrder用closingOpenTickets/operationId防重复点。 - 简历一句:折叠持仓下一次平仓请求映射为多 ticket 按比例/上限拆手数,并做 ticket 级防重复提交。
8. 订单提交路径:幂等感、防抖、通知合并
- 代码:
useOrderSubmit里 500ms 最小间隔 +submitting;通知用payload.seq作 key 替换同一条「进行中→成功/失败」。 - 简历一句:Socket 下单层做提交节流与通知单例,降低弱网重复点击与通知洪水。
9. 「多空力道」类情绪/占比条 + 外网延迟观测
- 代码:
TradeForceBar.tsx定时拉get_ratio,useTradingNetworkStatus用往返时间更新外部延迟(给交易体验一个可观测指标)。 - 简历一句:下单面板旁路展示后端聚合的多空占比,并把 HTTP 采样延迟纳入网络状态,辅助排查卡顿。
10. 账户动态字段与风控心智(和持仓 Worker 形成闭环)
- 代码:
useOpenPositionwatchtotalFloatingPL推equity / margin_fee / level_now(你已展开过万级持仓);类型里还有MarginLevel、server_offset_seconds、leverage等字段可与面试延伸。
二、这些要不要单独写进简历
- 不必每一条都占一条「Top 亮点」,否则会和 SLTP、NumericInput、万级持仓、WS、K 线抢篇幅。
- 推荐写法:在「交易终端」项目描述里加 1 段「订单与报价语义」子 bullet,把 (1)(2)(4) 合成一句;再加 1 段「批量与部分平仓」 把 (6)(7)(8) 合成一句;开闭市 (3) 若简历篇幅够可并入「多时区日历 Worker」那条,写「消费端:交易面板 gating」。
三、示范简历短句(可直接粘贴改编)
- Bid/Ask 与订单类型:封装持仓/挂单两套报价取用规则,并基于现价与限价自动区分 Limit/Stop,限价等于现价时前置拦截,保证与 MT 下单语义一致。
- 规格驱动 + 保证金:手数输入严格绑定
min/max/step volume,并结合账户币种保证金折算计算理论最大可开手数(Decimal 对齐步长)。 - 批量与部分平仓:批量
sendCmd使用allSettled+ 可渲染的多行错误;折叠持仓部分平仓按子单手数拆单;ticket 级防重复提交。 - 开闭市:交易面板仅在日历 Worker 判定
isOpen时渲染下单区,闭市展示下次开盘,避免无效下单请求。
四、面试官可能追问的「深入题」(你可提前准备)
- 持仓盈亏若完全信服务端 PUSH,为什么还要本地因子近似?(你项目里是
__profitFactor+ 报价批处理那条线。) - Limit vs Stop 在 Buy 侧为什么是「委托价低于现价 → Limit」?画条数轴一句话说清。
- 若
margin_in_user_currency与margin_free币种不一致怎么办?(看你们是否保证已折算到账户币。) - 批量操作「部分成功」产品上要 retry 还是人工逐条处理?你们当前是展示逐 ticket 错误。
若你希望,我可以把上述内容 直接合并进你之前那份「Top 8 + 技术亮点清单」,标成「交易语义与风控展示」一节,避免和 Worker/WS 条目重复表述。
